#include "../../common/icsearch.hpp"
#include <gflags/gflags.h>


DEFINE_bool(run_mode, false, "程序的运行模式, fasle-调试; true-发布;");
DEFINE_string(log_file, "", "发布模式下, 用于指定日志的输出文件");
DEFINE_int32(log_level, 0, "发布模式下, 用于指定日志输出等级");  //trace default 0

int main(int argc, char* argv[])
{
    google::ParseCommandLineFlags(&argc, &argv, true);

    init_logger(FLAGS_run_mode, FLAGS_log_file, FLAGS_log_level);
    std::shared_ptr<elasticlient::Client> client(new elasticlient::Client({"http://127.0.0.1:9200/"}));

    ESIndex esindex(client, "test_user");

    esindex.append("nickname");
    esindex.append("phone", "keyword", "standard", "true"); //手机号不能分词 用keyword
    bool ret = esindex.create();

    //这是一个数据的新增
    ESInsert esinsert(client, "test_user");
    esinsert.append("nickname", "张三");
    esinsert.append("phone", "15555597978889");
    ret = esinsert.insert("00001");
    if(ret == false)
    {
        LOG_ERROR("数据插入失败");
    }
    //这是一个数据的修改
    esinsert.append("nickname", "张三");
    esinsert.append("phone", "11111");
    ret = esinsert.insert("00001");
    if(ret == false)
    {
        LOG_ERROR("数据更新失败");
    }
    //这是数据的查询
    ESSearch essearch(client, "test_user");
    essearch.append_should_match("phone.keyword", "11111"); //phone查询时也不希望分词
    //essearch.append_must_not_terms("nickname.keyword", {"张三"}); //不分词 整体不能叫张三 传入vector<string>
    
    //sleep(1);
    Json::Value user = essearch.search();
    int sz = user.size();
    LOG_DEBUG("响应数组大小：{}", sz);
    if(user.empty() || user.isArray() == false)
    {
        LOG_ERROR("结果为空 或结果不为数组");
        return -1;
    }
    else
    {
        LOG_INFO("数据检索成功！");
    }

    LOG_DEBUG("检索结果条目数量：{}", sz);
    for(int i = 0; i < sz; i ++)
    {
        LOG_INFO("nickname:  {}", user[i]["_source"]["nickname"].asString());
    }
    //这是数据的删除
    //sleep(1);
    ESRemove esremove(client, "test_user");
    ret = esremove.remove("00001"); 
    if(ret == false)
    {
        LOG_ERROR("删除数据失败");
    }
    return 0;
} 